package com.test.nnooolwdeaer.util_wooden.analytics_wooden.util_wooden

import android.app.Application
import android.content.Context
import com.test.nnooolwdeaer.bean_wooden.StaticVariate_wooden
import com.test.nnooolwdeaer.util_wooden.analytics_wooden.bean_wooden.ParamHitPoint_wooden
import com.test.nnooolwdeaer.util_wooden.analytics_wooden.event_wooden.IAnalyticsEvent_wooden
import com.test.nnooolwdeaer.util_wooden.analytics_wooden.http_wooden.HttpHelper_wooden
import com.google.gson.Gson
import com.test.nnooolwdeaer.constant_wooden.Constant_wooden

object AnalyticsUtil_wooden {

    /**
     * 初始化分析模块
     *
     * @param context Application
     */
    fun init(context: Application) {
        /** 初始化google install referrer */
        GoogleInstallUtil_wooden.init(context) {
            /** 保存渠道信息*/
            saveGoogleInstallInfo(mutableListOf(StaticVariate_wooden.getBaseUrl()+ StaticVariate_wooden.getCountryUrlPrefix_wooden()))
        }

        /** 初始化广告id */
        AdvertIdUtil_wooden.init(context) { _, _ ->
            /** 保存渠道信息*/
            saveGoogleInstallInfo(mutableListOf(StaticVariate_wooden.getBaseUrl()+StaticVariate_wooden.getCountryUrlPrefix_wooden()))
        }

        /** 初始化设备信息 */
        SycDeviceUtil_wooden.init(context)

        /** 初始化af信息 */
//        AppsflyerUtil_wooden.init(context, Constant_wooden.APPSFLYER_DEV_KEY)

        /** 初始化adjust信息 */
        AdjustUtil.init(context)

        /** 初始化frebase */
        FirebaseUtil_wooden.init(context)

//        /** 初始化usageStats */
//        UsageStatsUtil_wooden.init(GlobalConfig_wooden.getInstance().usageStatsDays)
    }

    /**
     * 更新设备模块服务器请求地址
     * 1、如果未登录，在登录页登录成功后触发
     * 2、如果已登录，在启动时登录地区的转发路径时初始化成功后触发
     *
     * @param context Application
     */
    fun initDevice(context: Application) {
        /** 初始化设备信息 */
        SycDeviceUtil_wooden.init(context)
    }

    /**
     * 打点
     * 主要对注册、申贷这两个结果记录打点
     * 均是接口返回成功后触发打点
     *
     * @param event 事件名
     */
    fun addEvent(event: IAnalyticsEvent_wooden) {
        AdjustUtil.addEvent(event)
        FirebaseUtil_wooden.addEvent(event)
    }

    /**
     * 保存google s2s信息
     * **通常不用手动触发**
     * 1、启动页，触发保存
     */
    fun saveGoogleInstallInfo(targetUrlList: List<String>) {
        try {
            GoogleInstallUtil_wooden.saveS2sInfo(targetUrlList)
        }catch (e:Exception){
            if (Constant_wooden.Debug) e.printStackTrace()
        }
    }

    /**
     * 保存firebase s2s信息
     * 1、启动页，如果是已登录状态，触发保存
     * 2、登录页，登录成功后，触发保存
     */
    fun saveFirebaseS2SInfo(targetUrlList: List<String>) {
        FirebaseUtil_wooden.saveS2SInfo(targetUrlList)
    }

    /**
     * 保存Device s2s信息
     * 1、首页，点击申请且所有权限通过后，触发保存
     */
    fun saveDeviceS2SInfo() {
        SycDeviceUtil_wooden.saveS2SInfo()
    }

    /**
     * 保存Adjust 安装信息
     * **通常不用手动触发**
     * 1、收到Adjust的转化回调后，触发保存
     */
    fun saveAdjustInstall(targetUrlList: List<String>) {
        AdjustUtil.saveInstallInfo(targetUrlList)
    }

    /**
     * 保存三方库 s2s信息
     * 1、启动页，如果是已登录状态，触发保存
     * 2、登录页，登录成功后，触发保存
     */
    fun saveFirebaseS2SInfo() {
        saveFirebaseS2SInfo(mutableListOf(StaticVariate_wooden.getBaseUrl()+StaticVariate_wooden.getCountryUrlPrefix_wooden()))
    }

    /**
     * 保存UsageStats s2s信息
     * **通常不用手动触发**
     * 1、首页点击申请时触发，前提是用户已授权
     */
    fun saveUsageStatsS2SInfo(context: Application, targetUrlList: List<String>) {
        UsageStatsUtil_wooden.saveS2SInfo(context, targetUrlList)
    }

    /**
     * 保存事件埋点
     *
     * @param type 事件类型
     * @param remark 备注
     */
    fun saveHitPointInfo(type: String, remark: String) {
        try {
            val params = ParamHitPoint_wooden(type = type, remark = remark)
            val body = Gson().toJson(params).trim()
            HttpHelper_wooden.postData("", body)
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

    /**
     * 判断是否拥有使用统计权限
     * 若拥有权限，则自动上传数据
     * 若没有权限，直接回调
     *
     * @param context Application
     * @param permissionGrantListener 权限授权回调
     */
    fun checkUsageStatsPermission(
        context: Application,
        permissionGrantListener: (Boolean) -> Unit
    ) {
        UsageStatsUtil_wooden.checkAppUsagePermission(context, permissionGrantListener)
    }

    /**
     * 跳转使用统计权限页
     *
     * @param context 上下文
     */
    fun startToUsageStatsPermissionSettingPage(context: Context) {
        UsageStatsUtil_wooden.startToUsageStatsPermissionSettingPage(context)
    }

    /**
     * 获取谷歌安装渠道信息
     */
    fun getInstallReferrer(): String {
        try {
            return GoogleInstallUtil_wooden.getInstallReferrer()
        }catch (e:Exception){
            if (Constant_wooden.Debug) e.printStackTrace()
            return ""
        }
    }

    /**
     * 获取adId
     */
    fun getAdId(): String {
        return AdvertIdUtil_wooden.getAdId()
    }

    /**
     * 获取adEnabled
     */
    fun getAdEnabled(): Int {
        return AdvertIdUtil_wooden.getAdEnabled()
    }

    /**
     * 获取安卓Id
     */
    fun getAndroidId(): String {
        return AdvertIdUtil_wooden.getAndroidId()
    }

    /**
     * 获取Firebase app id
     */
    fun getFirebaseAppId(): String {
        return FirebaseUtil_wooden.getFirebaseAppId()
    }

    /**
     * 获取Firebase ga4 id
     */
    fun getGa4InstanceId(): String {
        return FirebaseUtil_wooden.getGa4InstanceId()
    }
}